昨天簡單介紹完 Ansible 的基本概念了,今天來談談該如何使用 Ansible 來做事吧。
首先第一點是該如何設定 Ansible。我們有很多方法去影響 Ansible 該如何運作,包含透過 ansible.cfg
這個檔案、環境變數或是 CLI 的參數等等...不過若是要實現 IaC (Infrastructure as Code) 的話,把設定寫成檔案並且做版控才是上策,因此我會比較偏好使用 ansible.cfg
來設定。
Ansible 會嘗試從以下路徑讀取設定(摘自官方文件):
ANSIBLE_CONFIG
環境變數(如果有設定的話)./ansible.cfg
~/.ansible.cfg
/etc/ansible/config
Ansible 會依照以上順序去尋找設定檔,需要注意的是,只有第一個找到的設定檔會起作用,而不是合併所有設定。還有一點是,若當前路徑的權限是全域可寫的,那麼 ./ansible.cfg
並不會起作用。
那麼 ansible.cfg
裡面究竟要寫什麼內容呢,它可以提供的選項真的是非常的多,從官方文件可以看到一個超級長的列表,但以我目前的需求,只需要設定 inventory 的路徑即可。
所以 config 長得會像這樣,表示我會以當前路徑的 hosts
這個檔案作為 inventory file。
[defaults]
inventory = hosts
不過其實 inventory 也可以透過 CLI 參數指定就是了,若只有要寫這個的話或許也不是很需要開一個檔案出來。
inventory 的內容,便是定義 host 相關的資訊,通常為 ini 或是 yaml 格式,以連上 localhost 來說,長得會像這樣。
[local]
localhost ansible_connection=local
檔案可以分成三個部分來看:
[local]
,這個代表 group,可以讓我們替 host 分組,在後續進行操作的時候可以指定要對哪些 managed node 做事。不過這是可以不寫的,每個 host 預設都會被 all
這個群組選到localhost
,代表我們的 hostname,他可以是個能夠實際連上的 domain,但也可以做為別名使用(需另外設定實際連線用的 host)。ansible_connection=local
,是指定給這個 host 的變數,像是剛剛提到要指定 host 的話,就可以使用 ansible_host=127.0.0.1
這樣的方式去設定,關於 Ansible 內建的變數,可以參考這個列表。把上面的設定存為 hosts
之後,可以在電腦上面執行看看 ansible local -m command -a 'echo Hello, Ansible!'
,應該就會看到 Ansible 跟你說 hello 還有 warning了。
上面的 warning 看起來是因為 Ansible 現在是使用 /usr/bin/python
的原因,在 ansible.cfg
的 [defaults]
區段加上 interpreter_python = /usr/bin/python3
就好了。
本來想說今天可以順便把 playbook 的紀錄也寫完的@@,可是還沒寫完就已經要下車了...看來只好明天再補完。